

package cn.shengchao.examstar.rpc.distribute.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @program: examstarapi
 * @description: 分销角色枚举
 * @author: Xiong weiqiang
 * @create: 2025-03-25 10:22
 */
@Getter
@AllArgsConstructor
public enum DistributeContentRoleEnum {
    ROLE_YGSX("YGSX", "平台", 0), ROLE_CTPD("CTPD", "内容分销商", 60), ROLE_CTPD_EMP("CTPD_EMP", "内容商员工", 61),;

    private final String code;
    private final String description;
    private final Integer distributeLevel;

    /**
     * 按编码获取角色
     * 
     * @param code
     * @return
     */
    public static DistributeContentRoleEnum getByCode(final String code) {
        for (DistributeContentRoleEnum distributeContentRoleEnum : DistributeContentRoleEnum.values()) {
            if (distributeContentRoleEnum.getCode().equals(code)) {
                return distributeContentRoleEnum;
            }
        }
        return null;
    }

    /**
     * 按等级获取角色
     * 
     * @param level
     * @return
     */
    public static DistributeContentRoleEnum getRoleByLevel(final Integer level) {
        for (DistributeContentRoleEnum distributeContentRoleEnum : DistributeContentRoleEnum.values()) {
            if (distributeContentRoleEnum.getDistributeLevel().equals(level)) {
                return distributeContentRoleEnum;
            }
        }
        return null;
    }

    /**
     * method : getUpperRoleByCode
     * description : 获取上级角色，等级编码的规则是越小越上，统一体系第一个数字相同
     * 
     * @param code \{@link String \}
     * @return : cn.shengchao.examstar.enums.distributeContentRoleEnum
     * @author : Xiong weiqiang
     * @CreateDate : 2025-03-25 17:35:52
     * 
     * @Reviewed :
     * @UpdateLog : Name Date Reason/Contents
     *            ---------------------------------------
     *            **** **** ****
     *
     */
    public static DistributeContentRoleEnum getUpperRoleByCode(final String code) {
        DistributeContentRoleEnum distributeContentRoleEnum = DistributeContentRoleEnum.getByCode(code);

        if (distributeContentRoleEnum != null) {
            Integer upperLevel = 0;
            Integer level = distributeContentRoleEnum.getDistributeLevel();
            for (DistributeContentRoleEnum roleEnum : DistributeContentRoleEnum.values()) {
                if (roleEnum.getDistributeLevel() < level && roleEnum.getDistributeLevel() > upperLevel) {
                    upperLevel = roleEnum.getDistributeLevel();
                }
            }
            return getRoleByLevel(upperLevel);
        } else {
            return null;
        }
    }

    /**
     * method : getUpperRoleByLevel
     * description : 获取上级角色，等级编码的规则是越小越上，统一体系第一个数字相同
     * 
     * @param level \{@link Integer \}
     * @return : cn.shengchao.examstar.enums.distributeContentRoleEnum
     * @author : Xiong weiqiang
     * @CreateDate : 2025-03-25 17:35:52
     *
     * @Reviewed :
     * @UpdateLog : Name Date Reason/Contents
     *            ---------------------------------------
     *            **** **** ****
     *
     */
    public static DistributeContentRoleEnum getUpperRoleByLevel(final Integer level) {
        DistributeContentRoleEnum distributeContentRoleEnum = DistributeContentRoleEnum.getRoleByLevel(level);
        if (distributeContentRoleEnum != null) {
            Integer upperLevel = 0;
            for (DistributeContentRoleEnum roleEnum : DistributeContentRoleEnum.values()) {
                if (roleEnum.getDistributeLevel() < level && roleEnum.getDistributeLevel() > upperLevel) {
                    upperLevel = roleEnum.getDistributeLevel();
                }
            }
            return getRoleByLevel(upperLevel);
        } else {
            return null;
        }
    }
}